package com.example.springbooteasycode.aop;

/**
 * 创建上下文工具类，在请求处理时保存端口
 * @author Csa
 * @date 2025/08/04
 */
public class PortContextHolder {
    // ThreadLocal 存储当前请求的服务端端口（客户端实际连接的端口）
    private static final ThreadLocal<Integer> currentPort = new ThreadLocal<>();

    /**
     * MsgHandler，netty处理器调用
     * 绑定端口到上下文（供 AOP 读取）
     *         PortContextHolder.setPort(serverPort);
     * @param port
     */
    // 设置端口（在请求处理开始时调用）
    public static void setPort(int port) {
        currentPort.set(port);
    }

    /**
     * AOP调用
     * 从上下文获取端口（核心）
     *         Integer port = PortContextHolder.getPort();
     * @return
     */
    // 获取端口（AOP 中调用）
    public static Integer getPort() {
        return currentPort.get();
    }

    /**
     * MsgHandler，netty处理器调用
     * 清理上下文（必须调用，避免线程池复用导致端口混乱）
     *         PortContextHolder.clear();
     */
    // 清理端口（请求处理结束后调用，避免内存泄漏）
    public static void clear() {
        currentPort.remove();
    }
}
